package stack;

import java.util.Comparator;
import java.util.LinkedList;
import java.util.PriorityQueue;

public class MinStack155 {
    LinkedList<Integer> stack = new LinkedList<>();
    LinkedList<Integer> minStack = new LinkedList<>();
    int min = Integer.MAX_VALUE;

    public MinStack155() {

    }

    public void push(int val) {
        stack.push(val);
        min = Math.min(min, val);
        minStack.push(min);
    }

    public void pop() {
        stack.pop();
        minStack.pop();
        min = minStack.size()==0?Integer.MAX_VALUE:minStack.peek();
    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return min;
    }

//    class Node {
//        int var;
//        public Node (int val){
//            this.var = val;
//        }
//    }
//    LinkedList<Node> stack ;
//    PriorityQueue<Node> sortedList;
//
//    public MinStack155() {
//        stack = new LinkedList<>();
//        sortedList = new PriorityQueue<Node>(Comparator.comparingInt(o -> o.var));
//    }
//
//    public void push(int val) {
//        Node node = new Node(val);
//        stack.offerFirst(node);
//        sortedList.offer(node);
//    }
//
//    public void pop() {
//        Node node = stack.pollFirst();
//        sortedList.remove(node);
//    }
//
//    public int top() {
//        return stack.peek().var;
//    }
//
//    public int getMin() {
//        return sortedList.peek().var;
//    }
}
